import { extend } from 'umi-request';
import { notification, message } from 'antd';
import { history } from 'umi';

// 全局配置
message.config({
  maxCount: 1
});

// 获取Cookie的函数
function getCookie(name) {
  var arr = [];
  var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)');
  arr = document.cookie.match(reg);
  return arr? unescape(arr[2]) : null;
}

// 状态码对应的消息
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  302: '系统没权限',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户得到授权，但是访问是被禁止的。',
  403: '用户没有权限。',
  // 404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  404: '服务异常。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。'
};

// 异常处理程序
function errorHandler(error) {
  console.log(error);
  const { response = {} } = error;
  if (response == null) {
    history.push('/');
    return { error_msg: '服务不可用，请重新登陆' };
  }

  const errortext = codeMessage[response.status] || response.statusText;
  const { status, url } = response;

  if (status === 200) {
    return true;
  }

  if (status === 404) {
    return { error_msg: errortext };
  }

  localStorage.removeItem('x-token');
  localStorage.removeItem('userInfo');
  localStorage.removeItem('authorized');
  localStorage.removeItem('buttonsAuthList');

  if (status === 302) {
    history.replace('/');
    return { error_msg: errortext };
  }

  if (status === 401) {
    history.push('/');
    return { error_msg: '登录过期' };
  }

  if (status === 403) {
    history.push('/exception/403');
    return { error_msg: errortext };
  }

  history.push('/');
  return { error_msg: '服务不可用，请重新登陆' };
}

// 配置request请求时的默认参数
const request = extend({
  prefix: '/api',
  // errorHandler,
  credentials: 'include'
});

// request拦截器, 改变url 或 options.
request.interceptors.request.use((url, options) => {
  options.headers.perms = options.headers.perms || (history.location.pathname.replace('#', '')).split('?')[0];
  return {
    url,
    options: {
   ...options,
      headers: {
        'x-token': localStorage.getItem('x-token'),
        'X-XSRF-TOKEN': getCookie('XSRF-TOKEN'),
     ...options.headers
      }
    }
  };
});

// 请求结果拦截器
request.interceptors.response.use(async response => {
  if (response.status === 401) {
    notification.error({
      message: '未登录或登录已过期，请重新登录。'
    });
    history.push('/login');
    return Promise.reject(response);
  }else if (response.status === 504) {
    notification.error({
      message: '请求超时，请稍后再试。'
    });
  }
  return Promise.resolve(response);
});
export default request;


